class Enemy {
  constructor(config) {
    this.type = config.type;
    this.width = config.width;
    this.height = config.height;
    // 敌机初始化位置
    this.x = Math.floor(Math.random() * (480 - config.width))
    this.y = -config.height;
    // 敌机生命
    this.life = config.life;
    // 敌机分数
    this.score = config.score;
    // 敌机图库
    this.frame = config.frame;
    // 此时此刻展示的图片
    this.img = this.frame.live[0];
    // 活着的标识
    this.live = true;
    // 敌机速度
    // this.minSpeed = config.minSpeed;
    // this.maxSpeed = config.maxSpeed;
    this.speed = Math.floor(Math.random() * (config.minSpeed - config.maxSpeed + 1)) + config.maxSpeed
    //最后时间标识
    this.lastTime = new Date().getTime()
    // 死亡下标
    this.deathIndex = 0;
    // 动画播放完毕彻底销毁敌机
    this.destroyed = false;
  }
  // 判断是否需要渲染 / 怎么渲染 / 是否移动
  move() {
    const currentTime = new Date().getTime();
    if (currentTime - this.lastTime >= this.speed) {
      // 如果敌机live为true， 那么播放活着的图片地址
      if (this.live) {
        this.img = this.frame.live[0];
        this.y++;

        // 修正上一次时间
        // this.lastTime = currentTime
      } else {
        this.img = this.frame.death[this.deathIndex++]
        // 死亡动画播放完毕操彻底销毁
        if (this.deathIndex === this.frame.death.length) {
          this.destroyed = true
        }
      }
      // 修正上一次时间
      this.lastTime = currentTime;
    }
  }
  // 渲染敌机
  paint() {
    context.drawImage(this.img, this.x, this.y)
  }
  // 敌机飞出边界销毁
  outOfBounds() {
    if (this.y > 700) {
      return true
    }
  }
  // 敌机是否撞到其他物体（子弹 / hero）
  hit(o) {
    // 其他物体的左边
    let ol = o.x;
    // 其他物体的右边
    let or = o.x + o.width;
    // 其他物体的顶边
    let ot = o.y;
    // 其他物体的底边
    let ob = o.y + o.height;
    // 敌机的左边
    let el = this.x;
    // 敌机的右边
    let er = this.x + this.width;
    // 敌机的顶边
    let et = this.y;
    // 敌机的底边
    let eb = this.y + this.height

    // 判断是否有碰到
    if (ol > er || or < el || ot > eb || ob < et) {
      // 没碰到
      return false
    } else {
      // 碰到
      return true
    }
  }
  // 敌机碰撞
  collide() {
    // 敌机生命值
    this.life--
    if (this.life === 0) {
      this.live = false
      // 击毁敌机的分数
      score += this.score
    }
  }
}
